4KのRay Tracingアニメーション動画 - 生成方法とか時間とか
念願だった4Kの動画をレイトレーシングで生成。
YouTube 4K動画
YouTubeは4K動画対応してくれているので、YouTubeに動画を投稿
https://gyazo.com/cdc4035a3ee392b18ac1861f7dc0c861
https://youtu.be/xeP6L15Ec80
Vimeo
高画質動画といえばVimeoが有名。そのため今回はVimeoにも投稿。
https://gyazo.com/ce94c38167391ab3faeb14c3361813d6
https://vimeo.com/346826080
生成コマンド
cargo build --releaseした後に、以下のコマンドで生成した。
code:bash
git checkout f031abf1cb26a65c2d33869b0eadfc7ed746871e
date && time cargo run --release -- --width=3840 --height=2160 --n-samples=70 --anime-out-dir-path=anime-seed17-4k --random-seed=17
3840x2160は推奨される解像度で以下を参考にしている。
https://gyazo.com/b52297fae2b18f1a54290ba7ef48083d
時間とメモリさえあればプログラム的には無限に解像度を向上させられるはず。
アニメーション化コマンド
ffmpegで作る。アニメーションは無限にループも成り立つようにカメラワークなど設計していて、YouTubeなどに無償でループ機能がないため(クエリパラメータにloop=1とかない)、ループするように動画生成している。-framerateとかをいじれば動画の速度も変えられる。 $ ffmpeg -stream_loop 2 -framerate 20 -i anime%08d.ppm -c:v libx264 -pix_fmt yuv420p anime-3-loop.mp4
かかった時間
自分のiMac使って$ 6243分 \approx 4.3日かかった。
code:かかった時間
real 6243m6.331s
user 49375m51.889s
sys 32m40.987s
レイトレーシングが実際に使われている例 - 映画で書いたように、ディズニーとかだと55000コアのCPU使って、125年相当の時間を使って、生成したりしている。Rayon で並列化しているためコアが増ええればその分高速化してくれている。上記の時間のuserをみると$ 49375分 \approx 34.2日になっていることがわかる。4.33日ではない。コア1個でやっていたら1ヶ月以上かかっていたってことかな。 レイを飛ばしたピクセルの総数は998億6457万6000
1枚の画像が3840 x 2160 = 8294400ピクセル
アンチエイリアシングの目的で、同じピクセルに70回少しずらしてレイを飛ばしている。つまり8294400 x 70=580608000ピクセルにレイを飛ばすことになる。
アニメーションに使ったフレーム数が172枚なので、580608000 x 172 = 99864576000ピクセル
ということであの4Kの動画を生成するために、合計で99864576000ピクセル=998億6457万6000ピクセルにレイを飛ばしたということになる。